package redis

import "context"

// 将任意数量的元素添加到指定的 HyperLogLog 里面
func (h *Handler) PFAdd(key string, els ...interface{}) (count int64, err error) {
	count, err = h.Client.PFAdd(context.Background(), key, els...).Result()
	go h.Log("HyperLogLog-PFAdd", []interface{}{key, els}, count, err)
	return
}

// 单个键时， 返回储存在给定键的 HyperLogLog 的近似基数， 如果键不存在， 那么返回 0;多个键时，返回所有给定 HyperLogLog 的并集的近似基数
func (h *Handler) PFCount(keys ...string) (count int64, err error) {
	count, err = h.Client.PFCount(context.Background(), keys...).Result()
	go h.Log("HyperLogLog-PFCount", keys, count, err)
	return
}

// 将多个 HyperLogLog 合并（merge）为一个 HyperLogLog ， 合并后的 HyperLogLog 的基数接近于所有输入 HyperLogLog 的可见集合（observed set）的并集
func (h *Handler) PFMerge(dest string, keys ...string) (status string, err error) {
	status, err = h.Client.PFMerge(context.Background(), dest, keys...).Result()
	go h.Log("HyperLogLog-PFMerge", []interface{}{dest, keys}, status, err)
	return
}
